/**
 * Created by mrcode on 2016/1/2.
 */
/**
 * 标签函数
 * @param opt
 *  el: 输入框对象
 *  regexp：输入框中内容校验正则表达式
 *  removeEvent:被移除事件回调，除了正常的工作外,会吧 删除掉的 文字传回
 * @constructor
 */
var WS = function (opt) {
    var regexp = opt.regexp || /\S/;
    var el = $(opt.el);
    var holder = $('<span class="words-split"></span>');  //装标签的容器
    var add = $('<a href="javascript:void(0)" class="words-split-add">+</a>'); //标签模版
    var list = [];
    if(el.val()){
        list = el.val().split(',');
    }

    for (var i = 0; i < list.length; i++) {
        holder.append($('<a href="javascript:void(0)" class="tag-fm-button">' + list[i] + '<em> </em></a>'));
    }

    el.hide().after(holder);
    holder.after(add);

    holder.on('click', 'a>em', function () {	//刪除
        var t = $(this).parent(), v = t.text();
        $(this).parent().remove();
        var inputVal = ''; //输入框 form表单输入框中的值
        var text = holder.text(); //标签展示中的值
        if(text){
            inputVal = text.match(/\S+/g).join(',');  //分割成数组，然后用逗号链接每个tagName变成字符串
        }
        el.val(inputVal);
        opt.removeEvent(v);
    });

    add.on('click', function () {				//添加预处理
        $(this).hide();
        var $input = $('<input maxlength="10" class="lbl-input" max contenteditable="true"/>');
        holder.append($input);
        $input.focus(); //获得焦点
    });

    holder.on('blur', '.lbl-input', function () {	//验证添加字段
        var t = $(this), v = t.val();
        if (regexp.test(v)) {
            t.remove();
            add.show();
            holder.append($('<a href="javascript:void(0)" class="tag-fm-button">' + v + '<em> </em></a>'));
            el.val(holder.text().match(/\S+/g).join(','));
        } else if (!v) {
            t.remove();
            add.show();
        } else {
            alert('输入不合法');
        }
    });

    holder.on('keydown', '.lbl-input', function (e) {
        switch (e.keyCode) {
            case 13:
            case 27:
                $(this).trigger('blur');
        }
    });
}